/*
 * Universidad del Valle de Guatemala
 * PostFix.java
 * Subclase de StackPostFix.java que maneja el ingreso de la cadena a la pila
 * y el cálculo de la operación introducida.
 */
package PostFix;


/**
 *
 * @author Jonathan López, 11106
 */
public class PostFix extends StackPostFix<Integer>{
    private Integer a,b,suma,resta,producto,cociente;
    public String cadena;
    public String cadenaLimpia;
    
    public PostFix(){
        cadena="";
        cadenaLimpia="";
    }
    
    /**
     * Procedimiento que analiza caracter por caracter para guardarlo u 
     * operarlo y así tener el resultado.
     * @param cadena 
     */
    public void pushStack(){
        char dato;
        String a;
        
        for(int i=0;i<cadenaLimpia.length();i++){
            dato=cadenaLimpia.charAt(i);
            if((dato=='+')|| (dato=='-')||(dato=='*')||(dato=='/')){
                calcular(dato);
            } else{
                a=""+dato;
                push(Integer.parseInt(a));
                }
            }                 
    }
    
    /**
     * Procedimiento para calcular la suma, resta, multiplicación o división
     * guardados en el Stack.
     * @param signo 
     */
    private void calcular(char signo){
        
        switch(signo){
            case '+':
                a=pop();
                b=pop();
                suma=a+b;
                if((a==null)||(b==null)){
                    push(null);
                } else{
                    push(a+b);
                    break;
                }
            case '-':
                a=pop();
                b=pop();
                if((a==null)||(b==null)){
                    push(null);
                } else{
                    push(b-a);
                    break;
                }
            case '*':
                a=pop();
                b=pop();
                if((a==null)||(b==null)){
                    push(null);
                } else{
                    push (a*b);
                    break;
                }
            case '/':
                a=pop();
                b=pop();
                if((a==null)||(b==null)||(a==0)){
                    push(null);
                } else{
                    push(a/b);
                    break;
                }
            }            
    }
    
    public void eliminarBlancos(String cadena){
        for(int i=0;i<cadena.length();i++){
            if(cadena.charAt(i)!=' '){
                cadenaLimpia += cadena.charAt(i);
            }
        }
    }
   
}
